package com.wind.stream;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;

/**
 * Stream的使用：聚合
 *
 * @author Wind
 * @date 2021-06-06
 */
public class Test04Stream {
    public static void main(String[] args) {

        // 1. 获取String集合中最长的元素
        List<String> strList = Arrays.asList("李白", "张学友", "God");
        String s1 = strList.stream().max(((o1, o2) -> o1.length() - o2.length())).get();
        System.out.println(s1);
        // 上面的简化写法
        String s2 = strList.stream().max((Comparator.comparingInt(String::length))).get();
        System.out.println(s2);

        // 2. 获取Integer集合中的最大值
        List<Integer> list = Arrays.asList(7, 6, 9, 3, 8, 2, 1);
        Integer maxNum1 = list.stream().max(((o1, o2) -> o1 - o2)).get();
        System.out.println(maxNum1);
        // 上面的简化写法
        Integer maxNum2 = list.stream().max(Integer::compareTo).get();
        System.out.println(maxNum2);

        // 自然排序
        Integer maxNum3 = list.stream().max(Integer::compareTo).get();
        // 自定义排序
        Integer maxNum4 = list.stream().max(new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                return o1 - o2;
            }
        }).get();
        // 3. 获取员工工资最高的人
        List<Person> persons = new ArrayList<>();
        persons.add(new Person("张三", 7000, 34, "男", "陕西"));
        persons.add(new Person("李四", 8000, 24, "男", "河北"));
        persons.add(new Person("王五", 6000, 42, "女", "甘肃"));
        persons.add(new Person("王五", 9000, 12, "女", "上海"));
        Person person1 = persons.stream().max((o1, o2) -> o1.getSalary() - o2.getSalary()).get();
        // 简化写法
        Person person2 = persons.stream().max(Comparator.comparingInt(Person::getSalary)).get();

        // 4. 计算Integer集合中大于6的元素的个数
        long count = list.stream().filter(t -> t > 6).count();
        System.out.println(count);
    }
}
